package org.dromara.demo.designPattern.适配器模式.adapter;

import com.alibaba.fastjson.JSON;
import org.dromara.demo.designPattern.适配器模式.entity.RebateInfo;

import java.lang.reflect.InvocationTargetException;
import java.util.Map;

/**
 * 适配器模式
 */
public class MQAdapter {
    public static RebateInfo filter(String strJson,
                                    Map<String, String> link) throws NoSuchMethodException,
            InvocationTargetException, IllegalAccessException {
        return filter(JSON.parseObject(strJson, Map.class),
                link);
    }
    public static RebateInfo filter(Map obj, Map<String, String> link) throws NoSuchMethodException,
            InvocationTargetException, IllegalAccessException {
        RebateInfo rebateInfo = new RebateInfo();
        for (String key : link.keySet()) {
            Object val = obj.get(link.get(key));
            RebateInfo.class.getMethod("set" +
                            key.substring(0, 1).toUpperCase() + key.substring(1),
                    String.class).invoke(rebateInfo, val.toString());
        }
        return rebateInfo;
    }

    /**
     * 这个类里的方法非常重要，主要用于把不同类型的MQ中的各种属性映
     * 射成需要的属性并返回。就像一个属性中有用户ID uId，将其映射到需
     * 要的userId，做统一处理。
     * 而这个处理过程需要把映射管理传递给Map<String，String>link，也
     * 就是准确地描述了当前MQ中某个属性名称，映射为指定的某个属性名
     * 称。
     * 最终接收到的MQ消息基本是JSON格式，可以转换为MAP结构。最
     * 后，使用反射调用的方式对类型赋值。
     */
}



